const _toString = Object.prototype.toString

/**
 * 检测他的原始类型, 通过 call 指定 value 的原始类型 为 Object.prototype.toString 方法的 上下文，即 this 指向
 * @param { * } value, 任意类型的值
 * @returns { String } 返回 value 的原始数据类型 例如： Array, Object, Date, 注意，这里是大写开头的字符串
 */
function toRawType(value) {
  return _toString.call(value).slice(8, -1)
}

export default {
    // 公共配置
    appConfig: (state) => state.app.config || {},
    // 用户信息
    userInfo: (state) => state.app.userInfo || {},
    IS_ALLOW_WITHDRAW: (state) => {
        const USER__INFO = state?.app?.userInfo || {}
        if (USER__INFO && toRawType(USER__INFO) === 'Object' && USER__INFO.hasOwnProperty('is_withdraw')) {
            return String(USER__INFO.is_withdraw) === '1' ? true : false
        }
        return true
    },
    // token
    token: (state) => state.app.token,
    // 客户端
    client: (state) => state.app.client,
    // 是否登录
    isLogin: (state) => {
		return !!state.app.token
	},
    // 主题名字
    themeName: (state) => state.decorate.config.theme || 'red_theme',
    // 主题颜色
    themeColor: (state) => {
        const { theme, config } = state.decorate
        return theme[config.theme] || '#FF2C3C'
    },
    // 底部导航
    tabbar: (state) => state.decorate.config.tabbar || {},
    //弹窗广告
    screen: (state) => state.decorate.config.screen || {}
}
